package ocio.actions;  

import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import ocio.beans.Cliente;
import ocio.beans.Reserva;
import ocio.beans.Subscripcion;
import ocio.services.ClienteService;
import ocio.services.ServiceLocator;

import com.opensymphony.xwork2.ActionSupport;
/**
 * Clase destinataria de la petición de modificación de los datos de un cliente.
 * @author Esther García Galán
 * @author Rubén Gómez Vales
 * @version 1.0 13/05/2014
 * @see ocio.beans.Cliente
 */
public class ModificarClienteAction extends ActionSupport {

	private static final long serialVersionUID = 1L;
	
	private int id;
	private String correo;
	private String password;
	private String passwordbis;
	private int rol;
	private String nombre;
	private String telefono;
	private List<Cliente> listaClientes = new ArrayList<Cliente>();
	private Set<Reserva> listaReservas = new HashSet<Reserva>();
	private Set<Subscripcion> listaSubscripciones = new HashSet<Subscripcion>();
	
	private Cliente cliente;
	private String mensaje;
	private Date fechahoy;

   /**
	 * Método execute() de la clase ActionSupport de Struts 2. 
	 * Solicita los servicios para modificar la información del cliente según
	 * los datos introducidos por el mismo o por el administrador en un formulario.
	 * @return un string que indica la respuesta de la acción ejecutada sobre la petición del usuario.
	 */
	public String execute(){	
		
		setFechahoy(new Date());
		this.setRol(2); //El rol de cliente es 2.
		
		ServiceLocator serviceLocator = ServiceLocator.getServiceLocator();
		ClienteService clienteService = (ClienteService)serviceLocator.getService("Cliente");		

		clienteService.update(this);	   

		this.listaClientes=clienteService.ListAllClients();

		this.cliente=(Cliente)clienteService.searchById(id);
		this.listaReservas=this.cliente.getReservas();
		this.listaSubscripciones=this.cliente.getSubscripciones();
		mensaje="Los datos del cliente han sido modificados con éxito.";
		return "success";	
	}

   /**
	 * Método validate() de la clase ActionSupport de Struts 2. 
	 * Comprueba que la informacion introducida por el cliente o administrador en el formulario
	 *  está en el formato adecuado, se han rellenado los campos obligatorios y la contraseña 
	 * tiene una longitud mínima.
	 */
	public void validate(){
		this.setRol(2);
		
		if (password.length()!=0 && passwordbis.length()!=0){
			if (!password.equals(passwordbis)){
				this.addActionError("Las contraseñas no coinciden.");
			}
			if (password.length()>0 && password.length()<6){
				this.addFieldError("password", "La contraseña debe tener minimo 6 caracteres. ");
			}
		}
		
		if(nombre.length()==0){
			this.addFieldError("nombre","El campo Nombre es obligatorio.");
		}
		
	
		if(telefono.length()==0){
			this.addFieldError("telefono","El campo Teléfono es obligatorio.");
		}
		
		//Datos de la página a la que se devuelve el control
		ServiceLocator serviceLocator = ServiceLocator.getServiceLocator();
		ClienteService clienteService = (ClienteService)serviceLocator.getService("Cliente");		
		this.cliente=(Cliente)clienteService.searchById(id);
		this.listaReservas=this.cliente.getReservas();
		this.listaSubscripciones=this.cliente.getSubscripciones();
		mensaje="Error en la introducción de los datos";
		
	}
	
	
	
	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	
	public String getTelefono() {
		return telefono;
	}

	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}

	public String getCorreo() {
		return correo;
	}

	public void setCorreo(String correo) {
		this.correo = correo;
	}

	public int getRol(){
		return rol;
	}
	
	public void setRol(int rol){
		this.rol=rol;
	}

	public String getPasswordbis() {
		return passwordbis;
	}

	public void setPasswordbis(String passwordbis) {
		this.passwordbis = passwordbis;
	}
	
	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
	

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	
	public String getMensaje() {
		return mensaje;
	}

	public void setMensaje(String mensaje) {
		this.mensaje = mensaje;
	}

	public List<Cliente> getListaClientes() {
		return listaClientes;
	}

	public void setListaClientes(List<Cliente> listaClientes) {
		this.listaClientes = listaClientes;
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public Set<Reserva> getListaReservas() {
		return listaReservas;
	}

	public void setListaReservas(Set<Reserva> listaReservas) {
		this.listaReservas = listaReservas;
	}

	public Set<Subscripcion> getListaSubscripciones() {
		return listaSubscripciones;
	}

	public void setListaSubscripciones(Set<Subscripcion> listaSubscripciones) {
		this.listaSubscripciones = listaSubscripciones;
	}

	public Date getFechahoy() {
		return fechahoy;
	}

	public void setFechahoy(Date fechahoy) {
		this.fechahoy = fechahoy;
	}
	
}
